<?php
/*----------------------------------------------------------------------------------------------
Kit Applicatif PHP
Noyau générique d'applications PHP / generic kernel for PHP applications
noyau 0.4 / PHP 4
http://code.fredbird.org/kap

gestion des droits d'acces par uri, stockage sql

table :
user_id=0 signifie : tout le monde
create table kap_uri_permissions(
	id integer unsigned primary key not null auto_increment,
	uri varchar(255) not null default '/',
	user_id integer unsigned not null default 0,
	permission enum('allow','deny') not null default 'deny',
	date timestamp,
	unique key unicite(uri,user_id)
);

file version 2005-01-13 13:56:27
----------------------------------------------------------------------------------------------*/

class kap_uriPermissionManager extends kap_core_component {
/*----------------------------------------------------------------------------------------------
                                                                           parametres par defaut
----------------------------------------------------------------------------------------------*/
	var $default_parameters=array(
		'defaultPermission'=>'deny',
	);
/*----------------------------------------------------------------------------------------------
                                                                           constructeur eventuel
----------------------------------------------------------------------------------------------*/
	/*function kap_(& $controller) {
		// appel du constructeur parent
		$const=get_parent_class($this);
		parent::$const($controller);
		// suite
	}*/
/*----------------------------------------------------------------------------------------------
                                                                              methodes publiques
a lier dans components/controller.kap-core.php et api.kap-core.php
----------------------------------------------------------------------------------------------*/
	// determine si l'uri est publique (pas d'authentification) ou privée
	function isPublicUri($uri=NULL) {
		return $this->checkIdOnUri(0,$uri);
	}
	// vérifie les droits d'une id utilisateur sur l'uri
	function checkIdOnUri($userId,$uri=NULL) {
		if ($uri===NULL) $uri=CALL_URI;
		//if ($this->isPublicUri()) return true;
		if (!$perm=$this->searchToRoot($uri,$userId)) {
			/*echo affvar($perm);*/
			if ($this->parameters['defaultPermission']=="allow") return true;
			else return false;
			return false;
		} else if ($perm['permission']=='allow') {
			return true;
		} else return false;
	}
	
	// vérifie les droits de plusieurs id (groupes) sur l'uri
	function checkIdsOnUri($ids=array(),$uri=NULL) {
		foreach ($ids as $id) {
			if ($this->checkIdOnUri($id, $uri)) return true;
		}
		return false;
	}
/*----------------------------------------------------------------------------------------------
                                                                                méthodes privées
----------------------------------------------------------------------------------------------*/
	/* recherche régressive :
	recherche d'abord l'uri complète, puis descend d'un segment, jusqu'à la racine
	en ajoutant and à la clause where */
	function searchToRoot($uri,$user) {
		//echo $uri;
		while ($uri) {
			$sql="SELECT * FROM kap_uri_permissions"
			." WHERE uri='$uri' AND user_id='$user'";// echo $sql;
			if ($result=kapSqlUniqueResult($sql)) {
				//echo affvar($result);
				return $result;
			}
			// raccourcissement
			$uri=substr($uri,0,strrpos($uri,'/'));
		}
		return false;
	}
/*----------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------*/
}
?>
